import Recorder from 'recorder-core';
import 'recorder-core/src/engine/wav';
import {ChatMessageApi} from '@/api/ai/chat/message'

const message = useMessage() //

let rec: any;
let recBlob: any;
let wave: any;

// 打开录音
export function recOpen() {
  //创建录音对象
  rec = Recorder({
    type: 'wav', //录音格式，可以换成wav等其他格式
    sampleRate: 16000, //录音的采样率，越大细节越丰富越细腻
    bitRate: 16, //录音的比特率，越大音质越好
    onProcess: (
        buffers: any,
        powerLevel: any,
        bufferSampleRate: any,
    ) => {
      //录音实时回调，大约1秒调用12次本回调
      //可实时绘制波形，实时上传（发送）数据
      if (wave) {
        wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);
      }
    },
  });
  if (!rec) {
    alert('当前浏览器不支持录音功能！');
    return;
  }
  //打开录音，获得权限
  rec.open(
      () => {
        console.log('录音已打开');
      },
      (msg: any, isUserNotAllow: any) => {
        //用户拒绝了录音权限，或者浏览器不支持录音
        console.log((isUserNotAllow ? 'UserNotAllow，' : '') + '无法录音:' + msg);
      },
  );
}

// 开始录音
export function recStart() {
  if (!rec) {
    recOpen();
  }
  try {
    rec.start();
    console.log('已开始录音');
  } catch {
    console.log("未打开录音")
  }
}

// 结束录音
export function recStop() {
  if (!rec) {
    message.error("未打开录音")
    return;
  }
  rec.stop(
      (blob: any, duration: any) => {
        //blob就是我们要的录音文件对象，可以上传，或者本地播放
        console.log(blob)
        recBlob = blob;
        //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download="xxx.mp3"属性）
        const localUrl = (window.URL || window.webkitURL).createObjectURL(blob);
        console.log('录音成功', blob, localUrl, '时长:' + duration + 'ms');
        upload(blob); //把blob文件上传到服务器
        rec.close(); //关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start
        rec = null;
      },
      (err: any) => {
        console.error('结束录音出错：' + err);
        rec.close(); //关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start
        rec = null;
      },
  );
}

// 上传录音
export async function upload(blob: any) {
  // 获取消息列表
  const updateRes = await ChatMessageApi.updateVoiceMsg(
      {file:blob}
  )
  console.log(updateRes);
  // FileApi.updateFile({file:blob}).then((res) =>{
  //   console.log(res)
  // })
  

  
  // uploadService(blob, 'zengjiaqi_test.wav');
}

// 本地播放录音
export function recPlay() {
  //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放
  const localUrl = URL.createObjectURL(recBlob);
  const audio = document.createElement('audio');
  audio.controls = true;
  document.body.appendChild(audio);
  audio.src = localUrl;
  audio.play(); //这样就能播放了
  //注意不用了时需要revokeObjectURL，否则霸占内存
  setTimeout(function () {
    URL.revokeObjectURL(audio.src);
  }, 5000);
}


